//package com.gxar.navigation.server.db.service;
//
//import lombok.RequiredArgsConstructor;
//import org.redisson.api.RLock;
//import org.redisson.api.RedissonClient;
//import org.springframework.stereotype.Service;
//
//import java.util.concurrent.TimeUnit;
//
///**
// * redisson 分布式锁
// */
//@Service
//@RequiredArgsConstructor
//public class RedisLockService {
//
//    private final RedissonClient redissonClient;
//
//    /**
//     * 加锁
//     *
//     * @param lockKey 锁Key
//     * @return
//     */
//    public RLock lock(String lockKey) {
//
//        RLock rlock = redissonClient.getLock(lockKey);
//        rlock.lock();
//        return rlock;
//    }
//
//    /**
//     * 释放锁
//     *
//     * @param lockKey 锁Key
//     */
//    public void unlock(String lockKey) {
//        RLock rlock = redissonClient.getLock(lockKey);
//        rlock.unlock();
//    }
//
//    /**
//     * 释放锁
//     *
//     * @param lock 锁对象
//     */
//    public static void unlock(RLock lock) {
//        lock.unlock();
//    }
//
//    /**
//     * 带超时的锁
//     *
//     * @param lockKey 锁key
//     * @param timeout 超时时间   单位：秒
//     */
//    public RLock lock(String lockKey, int timeout) {
//        RLock rLock = redissonClient.getLock(lockKey);
//        rLock.lock(timeout, TimeUnit.SECONDS);
//        return rLock;
//    }
//
//    /**
//     * 带超时的锁
//     *
//     * @param lockKey 锁key
//     * @param unit    时间单位
//     * @param timeout 超时时间
//     */
//    public RLock lock(String lockKey, int timeout, TimeUnit unit) {
//        RLock rLock = redissonClient.getLock(lockKey);
//        rLock.lock(timeout, unit);
//        return rLock;
//    }
//
//    /**
//     * 尝试获取锁
//     *
//     * @param lockKey   锁key
//     * @param waitTime  最多等待时间  单位：秒
//     * @param leaseTime 上锁后自动释放锁时间  单位：秒
//     * @return
//     */
//    public boolean tryLock(String lockKey, int waitTime, int leaseTime) throws InterruptedException {
//        RLock lock = redissonClient.getLock(lockKey);
//        return lock.tryLock(waitTime, leaseTime, TimeUnit.SECONDS);
//    }
//
//    /**
//     * 尝试获取锁
//     *
//     * @param lockKey   锁key
//     * @param unit      时间单位
//     * @param waitTime  最多等待时间
//     * @param leaseTime 上锁后自动释放锁时间
//     * @return
//     */
//    public boolean tryLock(String lockKey, TimeUnit unit, int waitTime, int leaseTime) throws InterruptedException {
//        RLock lock = redissonClient.getLock(lockKey);
//        return lock.tryLock(waitTime, leaseTime, unit);
//    }
//}